home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 July: Mac OS SDK / Dev.CD Jul 97 SDK1.toast / Development Kits (Disc 1) / PC Card Manager / CIncludes / Unicode.h < prev   
Encoding:
C/C++ Source or Header  |  1997-01-13  |  13.7 KB  |  365 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        Unicode.h
  3.  
  4.      Contains:    Unicode Interfaces.
  5.  
  6.      Version:    System 7.1 through System 8
  7.  
  8.      DRI:        Julio Gonzalez
  9.  
  10.      Copyright:    © 1984-1996 by Apple Computer, Inc.
  11.                  All rights reserved.
  12.  
  13.      Warning:    *** APPLE INTERNAL USE ONLY ***
  14.                  This file may contain unreleased API's
  15.  
  16.      BuildInfo:    Built by:            SuperMario Build Daemon
  17.                  With Interfacer:    2.0d10   (PowerPC native)
  18.                  From:                Unicode.i
  19.                      Revision:        45
  20.                      Dated:            1/24/96
  21.                      Last change by:    jag
  22.                      Last comment:    Make findMapping parameter of QueryUnicodeMappings into a
  23.  
  24.      Bugs:        Report bugs to Radar component “System Interfaces”, “Latest”
  25.                  List the version information (from above) in the Problem Description.
  26.  
  27. */
  28. #ifndef __UNICODE__
  29. #define __UNICODE__
  30.  
  31. #ifndef __TYPES__
  32. #include <Types.h>
  33. #endif
  34. #ifndef __TEXTCOMMON__
  35. #include <TextCommon.h>
  36. #endif
  37. #ifndef __MIXEDMODE__
  38. #include <MixedMode.h>
  39. #endif
  40.  
  41. #ifdef __cplusplus
  42. extern "C" {
  43. #endif
  44.  
  45. #if PRAGMA_IMPORT_SUPPORTED
  46. #pragma import on
  47. #endif
  48.  
  49. #if PRAGMA_ALIGN_SUPPORTED
  50. #pragma options align=mac68k
  51. #endif
  52.  
  53. #if 0
  54. /*
  55.  The following 7 typedefs are required for seeds until they get
  56.  moved to a future version of Types.[hp] in a future ETO release.
  57.  Also note that seeds should include a copy of the new TextCommon.[hp].
  58. */
  59. typedef UInt8 *BytePtr;
  60. typedef UInt32 ByteCount;
  61. typedef UInt32 ItemCount;
  62. typedef UInt32 OptionBits;
  63. typedef short RegionCode;
  64. typedef UInt32 ByteOffset;
  65. typedef const void *ConstLogicalAddress;
  66. /*
  67.  The following typedefs are required for seeds until they get
  68.  moved to a future version of Errors.[hp] in a future ETO release.
  69.  Unicode Converter Error Codes
  70. */
  71.  
  72. enum {
  73.     unicodeChecksumErr            = -8769,
  74.     unicodeNoTableErr            = -8768,
  75.     unicodeVariantErr            = -8767,
  76.     unicodeFallbacksErr            = -8766,
  77.     unicodePartConvertErr        = -8765,
  78.     unicodeBufErr                = -8764,
  79.     unicodeCharErr                = -8763,
  80.     unicodeElementErr            = -8762,
  81.     unicodeNotFoundErr            = -8761,
  82.     unicodeTableFormatErr        = -8760,
  83.     unicodeDirectionErr            = -8759,
  84.     unicodeContextualErr        = -8758,
  85.     unicodeTextEncodingDataErr    = -8757
  86. };
  87.  
  88. #endif
  89. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  90. /* Unicode Converter Gestalt Constants: (••••these belong in Gestalt.i••••) */
  91.  
  92. enum {
  93.     gestaltUnicodeAttr            = 'unic',
  94.     gestaltUnicodeConverterPresent = 0,
  95.     gestaltUnicodeConverterMask    = 1L << gestaltUnicodeConverterPresent
  96. };
  97.  
  98. /* Basic types for Unicode characters and strings: */
  99. typedef UniChar *UniCharArrayPtr;
  100. typedef const UniChar *ConstUniCharArrayPtr;
  101. /* Unicode conversion contexts: */
  102. typedef struct OpaqueTextToUnicodeInfo* TextToUnicodeInfo;
  103. typedef struct OpaqueUnicodeToTextInfo* UnicodeToTextInfo;
  104. typedef struct OpaqueUnicodeToTextRunInfo* UnicodeToTextRunInfo;
  105. typedef const TextToUnicodeInfo ConstTextToUnicodeInfo;
  106. typedef const UnicodeToTextInfo ConstUnicodeToTextInfo;
  107. /* UnicodeMapVersion type & values */
  108. typedef SInt32 UnicodeMapVersion;
  109.  
  110. enum {
  111.     kUnicodeUseLatestMapping    = -1
  112. };
  113.  
  114. /* Types used in conversion */
  115. struct UnicodeMapping {
  116.     TextEncoding                     unicodeEncoding;
  117.     TextEncoding                     otherEncoding;
  118.     UnicodeMapVersion                 mappingVersion;
  119. };
  120. typedef struct UnicodeMapping UnicodeMapping;
  121.  
  122. typedef UnicodeMapping *UnicodeMappingPtr;
  123. typedef const UnicodeMapping *ConstUnicodeMappingPtr;
  124. struct TextEncodingRun {
  125.     ByteOffset                         offset;
  126.     TextEncoding                     textEncoding;
  127. };
  128. typedef struct TextEncodingRun TextEncodingRun;
  129.  
  130. /* Control flags for ConvertUnicodeToText and ConvertTextToUnicode */
  131.  
  132. enum {
  133.     kUnicodeUseFallbacksBit        = 0,
  134.     kUnicodeKeepInfoBit            = 1,
  135.     kUnicodeDirectionalityBits    = 2,
  136.     kUnicodeVerticalFormBit        = 4,
  137.     kUnicodeLooseMappingsBit    = 5,
  138.     kUnicodeStringUnterminatedBit = 6,
  139.     kUnicodeTextRunBit            = 7,
  140.     kUnicodeKeepSameEncodingBit    = 8
  141. };
  142.  
  143.  
  144. enum {
  145.     kUnicodeUseFallbacksMask    = 1L << kUnicodeUseFallbacksBit,
  146.     kUnicodeKeepInfoMask        = 1L << kUnicodeKeepInfoBit,
  147.     kUnicodeDirectionalityMask    = 3L << kUnicodeDirectionalityBits,
  148.     kUnicodeVerticalFormMask    = 1L << kUnicodeVerticalFormBit,
  149.     kUnicodeLooseMappingsMask    = 1L << kUnicodeLooseMappingsBit,
  150.     kUnicodeStringUnterminatedMask = 1L << kUnicodeStringUnterminatedBit,
  151.     kUnicodeTextRunMask            = 1L << kUnicodeTextRunBit,
  152.     kUnicodeKeepSameEncodingMask = 1L << kUnicodeKeepSameEncodingBit
  153. };
  154.  
  155. /* Values for kUnicodeDirectionality field */
  156.  
  157. enum {
  158.     kUnicodeDefaultDirection    = 0,
  159.     kUnicodeLeftToRight            = 1,
  160.     kUnicodeRightToLeft            = 2
  161. };
  162.  
  163. /* Control flags for TruncateForUnicodeToText: */
  164.  
  165. enum {
  166.     kUnicodeTextElementSafeBit    = 0,
  167.     kUnicodeRestartSafeBit        = 1
  168. };
  169.  
  170.  
  171. enum {
  172.     kUnicodeTextElementSafeMask    = 1L << kUnicodeTextElementSafeBit,
  173.     kUnicodeRestartSafeMask        = 1L << kUnicodeRestartSafeBit
  174. };
  175.  
  176. /* Filter bits for QueryUnicodeMappings filter field: */
  177.  
  178. enum {
  179.     kUnicodeMatchUnicodeBaseBit    = 0,
  180.     kUnicodeMatchUnicodeVariantBit = 1,
  181.     kUnicodeMatchUnicodeFormatBit = 2,
  182.     kUnicodeMatchOtherBaseBit    = 3,
  183.     kUnicodeMatchOtherVariantBit = 4,
  184.     kUnicodeMatchOtherFormatBit    = 5
  185. };
  186.  
  187.  
  188. enum {
  189.     kUnicodeMatchUnicodeBaseMask = 1L << kUnicodeMatchUnicodeBaseBit,
  190.     kUnicodeMatchUnicodeVariantMask = 1L << kUnicodeMatchUnicodeVariantBit,
  191.     kUnicodeMatchUnicodeFormatMask = 1L << kUnicodeMatchUnicodeFormatBit,
  192.     kUnicodeMatchOtherBaseMask    = 1L << kUnicodeMatchOtherBaseBit,
  193.     kUnicodeMatchOtherVariantMask = 1L << kUnicodeMatchOtherVariantBit,
  194.     kUnicodeMatchOtherFormatMask = 1L << kUnicodeMatchOtherFormatBit
  195. };
  196.  
  197. /* Control flags for SetFallbackUnicodeToText */
  198.  
  199. enum {
  200.     kUnicodeFallbackSequencingBits = 0
  201. };
  202.  
  203.  
  204. enum {
  205.     kUnicodeFallbackSequencingMask = 3L << kUnicodeFallbackSequencingBits
  206. };
  207.  
  208. /* values for kUnicodeFallbackSequencing field */
  209.  
  210. enum {
  211.     kUnicodeFallbackDefaultOnly    = 0L,
  212.     kUnicodeFallbackCustomOnly    = 1L,
  213.     kUnicodeFallbackDefaultFirst = 2L,
  214.     kUnicodeFallbackCustomFirst    = 3L
  215. };
  216.  
  217. #endif
  218. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  219. /* Caller-supplied entry point to a fallback handler */
  220. typedef pascal OSStatus (*UnicodeToTextFallbackProcPtr)(UniChar *srcUniStr, ByteCount srcUniStrLen, ByteCount *srcConvLen, BytePtr destStr, ByteCount destStrLen, ByteCount *destConvLen, LogicalAddress contextPtr, ConstUnicodeMappingPtr unicodeMappingPtr);
  221.  
  222. #if GENERATINGCFM
  223. typedef UniversalProcPtr UnicodeToTextFallbackUPP;
  224. #else
  225. typedef UnicodeToTextFallbackProcPtr UnicodeToTextFallbackUPP;
  226. #endif
  227.  
  228. enum {
  229.     uppUnicodeToTextFallbackProcInfo = kPascalStackBased
  230.          | RESULT_SIZE(SIZE_CODE(sizeof(OSStatus)))
  231.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(UniChar *)))
  232.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(ByteCount)))
  233.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ByteCount *)))
  234.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(BytePtr)))
  235.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(ByteCount)))
  236.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(ByteCount *)))
  237.          | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(LogicalAddress)))
  238.          | STACK_ROUTINE_PARAMETER(8, SIZE_CODE(sizeof(ConstUnicodeMappingPtr)))
  239. };
  240.  
  241. #if GENERATINGCFM
  242. #define NewUnicodeToTextFallbackProc(userRoutine)        \
  243.         (UnicodeToTextFallbackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, GetCurrentArchitecture())
  244. #else
  245. #define NewUnicodeToTextFallbackProc(userRoutine)        \
  246.         ((UnicodeToTextFallbackUPP) (userRoutine))
  247. #endif
  248.  
  249. #if GENERATINGCFM
  250. #define CallUnicodeToTextFallbackProc(userRoutine, srcUniStr, srcUniStrLen, srcConvLen, destStr, destStrLen, destConvLen, contextPtr, unicodeMappingPtr)        \
  251.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppUnicodeToTextFallbackProcInfo, (srcUniStr), (srcUniStrLen), (srcConvLen), (destStr), (destStrLen), (destConvLen), (contextPtr), (unicodeMappingPtr))
  252. #else
  253. #define CallUnicodeToTextFallbackProc(userRoutine, srcUniStr, srcUniStrLen, srcConvLen, destStr, destStrLen, destConvLen, contextPtr, unicodeMappingPtr)        \
  254.         (*(userRoutine))((srcUniStr), (srcUniStrLen), (srcConvLen), (destStr), (destStrLen), (destConvLen), (contextPtr), (unicodeMappingPtr))
  255. #endif
  256. #endif
  257. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  258. typedef pascal OSStatus (*UnicodeToTextFallbackPreemptiveProcPtr)(UniChar *srcUniStr, ByteCount srcUniStrLen, ByteCount *srcConvLen, BytePtr destStr, ByteCount destStrLen, ByteCount *destConvLen, LogicalAddress contextPtr, ConstUnicodeMappingPtr unicodeMappingPtr);
  259. /* Function prototypes */
  260. /*
  261.  The following are in TextCommon.i:
  262.  CreateTextEncoding, GetTextEncodingBase, GetTextEncodingVariant, GetTextEncodingFormat
  263. */
  264. /* Create a new TextToUnicodeInfo structure. */
  265. extern pascal OSStatus CreateTextToUnicodeInfo(ConstUnicodeMappingPtr UnicodeMapping, TextToUnicodeInfo *textToUnicodeInfo)
  266.  THREEWORDINLINE(0x303C, 0x0401, 0xABCE);
  267.  
  268. /* Create a new UnicodeToTextInfo structure. */
  269. extern pascal OSStatus CreateUnicodeToTextInfo(ConstUnicodeMappingPtr UnicodeMapping, UnicodeToTextInfo *unicodeToTextInfo)
  270.  THREEWORDINLINE(0x303C, 0x040C, 0xABCE);
  271.  
  272. extern pascal OSStatus CreateUnicodeToTextRunInfo(ItemCount numberOfMappings, ConstUnicodeMappingPtr UnicodeMapping, UnicodeToTextRunInfo *unicodeToTextInfo)
  273.  THREEWORDINLINE(0x303C, 0x0612, 0xABCE);
  274.  
  275. /* Dispose of a TextToUnicodeInfo structure. */
  276. extern pascal OSStatus DisposeTextToUnicodeInfo(TextToUnicodeInfo *textToUnicodeInfo)
  277.  THREEWORDINLINE(0x303C, 0x0202, 0xABCE);
  278.  
  279. /* Dispose of a UnicodeToTextInfo structure. */
  280. extern pascal OSStatus DisposeUnicodeToTextInfo(UnicodeToTextInfo *unicodeToTextInfo)
  281.  THREEWORDINLINE(0x303C, 0x020D, 0xABCE);
  282.  
  283. extern pascal OSStatus DisposeUnicodeToTextRunInfo(UnicodeToTextRunInfo *unicodeToTextInfo)
  284.  THREEWORDINLINE(0x303C, 0x0213, 0xABCE);
  285.  
  286. /* Convert a string to Unicode. */
  287. extern pascal OSStatus ConvertTextToUnicode(TextToUnicodeInfo textToUnicodeInfo, ByteCount sourceLen, ConstLogicalAddress sourceStr, OptionBits controlFlags, ItemCount offsetCount, ByteOffset *offsetArray, ByteCount bufLen, ByteCount *sourceRead, ByteCount *unicodeLen, UniCharArrayPtr unicodeStr)
  288.  THREEWORDINLINE(0x303C, 0x1404, 0xABCE);
  289.  
  290. /* Convert a string from Unicode. */
  291. extern pascal OSStatus ConvertUnicodeToText(UnicodeToTextInfo unicodeToTextInfo, ByteCount unicodeLen, ConstUniCharArrayPtr unicodeStr, OptionBits controlFlags, ItemCount offsetCount, ByteOffset *offsetArray, ByteCount bufLen, ByteCount *inputRead, ByteCount *outputLen, LogicalAddress outputStr)
  292.  THREEWORDINLINE(0x303C, 0x1403, 0xABCE);
  293.  
  294. extern pascal OSStatus ConvertUnicodeToTextRun(UnicodeToTextRunInfo unicodeToTextInfo, ByteCount unicodeLen, ConstUniCharArrayPtr unicodeStr, OptionBits controlFlags, ItemCount offsetCount, ByteOffset *offsetArray, ByteCount bufLen, ByteCount *inputRead, ByteCount *outputLen, LogicalAddress outputStr, ItemCount encodingRunBufLen, ItemCount *encodingRunOutLen, TextEncodingRun *encodingRuns)
  295.  THREEWORDINLINE(0x303C, 0x1A14, 0xABCE);
  296.  
  297. /* Truncate a multibyte string at a safe place. */
  298. extern pascal OSStatus TruncateForTextToUnicode(ConstTextToUnicodeInfo textToUnicodeInfo, ByteCount sourceLen, ConstLogicalAddress sourceStr, ByteCount maxLen, ByteCount *truncatedLen)
  299.  THREEWORDINLINE(0x303C, 0x0A06, 0xABCE);
  300.  
  301. /* Truncate a Unicode string at a safe place. */
  302. extern pascal OSStatus TruncateForUnicodeToText(ConstUnicodeToTextInfo unicodeToTextInfo, ByteCount sourceLen, ConstUniCharArrayPtr sourceStr, OptionBits controlFlags, ByteCount maxLen, ByteCount *truncatedLen)
  303.  THREEWORDINLINE(0x303C, 0x0C05, 0xABCE);
  304.  
  305. /* Convert a Pascal string to Unicode. */
  306. extern pascal OSStatus ConvertPStringToUnicode(TextToUnicodeInfo textToUnicodeInfo, ConstStr255Param pascalStr, ByteCount bufLen, ByteCount *unicodeLen, UniCharArrayPtr unicodeStr)
  307.  THREEWORDINLINE(0x303C, 0x0A08, 0xABCE);
  308.  
  309. /* Convert a Unicode string to Pascal. */
  310. extern pascal OSStatus ConvertUnicodeToPString(UnicodeToTextInfo unicodeToTextInfo, ByteCount unicodeLen, ConstUniCharArrayPtr unicodeStr, Str255 pascalStr)
  311.  THREEWORDINLINE(0x303C, 0x0807, 0xABCE);
  312.  
  313. /* Get a list of the available conversion mappings. */
  314. extern pascal OSStatus QueryUnicodeMappings(OptionBits filter, ConstUnicodeMappingPtr findMapping, ItemCount maxCount, ItemCount *actualCount, UnicodeMappingPtr returnedMappings)
  315.  THREEWORDINLINE(0x303C, 0x0A09, 0xABCE);
  316.  
  317. /* Get the name of a TextEncodingBase table. */
  318. extern pascal OSStatus GetTextEncodingBaseName(ConstUnicodeMappingPtr UnicodeMapping, LangCode languageID, ByteCount bufLen, ByteCount *nameLength, UniCharArrayPtr mappingName)
  319.  THREEWORDINLINE(0x303C, 0x090A, 0xABCE);
  320.  
  321. /* Change the TextToUnicodeInfo to another mapping. */
  322. extern pascal OSStatus ChangeTextToUnicodeInfo(TextToUnicodeInfo textToUnicodeInfo, ConstUnicodeMappingPtr UnicodeMapping)
  323.  THREEWORDINLINE(0x303C, 0x040B, 0xABCE);
  324.  
  325. /* Change the UnicodeToTextInfo to another mapping. */
  326. extern pascal OSStatus ChangeUnicodeToTextInfo(UnicodeToTextInfo unicodeToTextInfo, ConstUnicodeMappingPtr UnicodeMapping)
  327.  THREEWORDINLINE(0x303C, 0x040E, 0xABCE);
  328.  
  329. #endif
  330. #if FOR_SYSTEM8_PREEMPTIVE
  331. /* Setup the fallback handler for converting Unicode To Text. */
  332. extern pascal OSStatus SetFallbackUnicodeToTextPreemptive(UnicodeToTextInfo unicodeToTextInfo, UnicodeToTextFallbackPreemptiveProcPtr fallback, OptionBits controlFlags, LogicalAddress infoPtr);
  333.  
  334. extern pascal OSStatus SetFallbackUnicodeToTextRunPreemptive(UnicodeToTextRunInfo unicodeToTextRunInfo, UnicodeToTextFallbackPreemptiveProcPtr fallback, OptionBits controlFlags, LogicalAddress infoPtr);
  335.  
  336. #endif
  337. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  338. /* Setup the fallback handler for converting Unicode To Text. */
  339. extern pascal OSStatus SetFallbackUnicodeToText(UnicodeToTextInfo unicodeToTextInfo, UnicodeToTextFallbackUPP fallback, OptionBits controlFlags, LogicalAddress infoPtr)
  340.  THREEWORDINLINE(0x303C, 0x080F, 0xABCE);
  341.  
  342. extern pascal OSStatus SetFallbackUnicodeToTextRun(UnicodeToTextRunInfo unicodeToTextRunInfo, UnicodeToTextFallbackUPP fallback, OptionBits controlFlags, LogicalAddress infoPtr)
  343.  THREEWORDINLINE(0x303C, 0x0819, 0xABCE);
  344.  
  345. /*
  346.  The following are in TextCommon.i:
  347.  UpgradeScriptInfoToTextEncoding, RevertTextEncodingToScriptInfo
  348. */
  349. #endif
  350.  
  351. #if PRAGMA_ALIGN_SUPPORTED
  352. #pragma options align=reset
  353. #endif
  354.  
  355. #if PRAGMA_IMPORT_SUPPORTED
  356. #pragma import off
  357. #endif
  358.  
  359. #ifdef __cplusplus
  360. }
  361. #endif
  362.  
  363. #endif /* __UNICODE__ */
  364.  
  365.